package org.eda1.practica01.ejercicio02;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;

public class ProcesarDatos {

	public static ArrayList<EmpresaProyectos> cargarArchivo(String stringArchivoEntrada) {
		
		ArrayList<EmpresaProyectos> empresa = new ArrayList<EmpresaProyectos>();

		try {
			
			BufferedReader bf = new BufferedReader(new FileReader(stringArchivoEntrada));
			String linea;
			linea=bf.readLine();
			
			while(  linea!= null ){
				boolean empresaCreada = false;
				String[] aux = new String[3];
				aux = linea.split(" ");
				for (EmpresaProyectos iterador : empresa) {
					if(iterador.getEmpresa().equals(aux[0])){
						iterador.addProyectoCiudad(aux[1], aux[2]);
						empresaCreada = true;
						break;
					}
				}
				EmpresaProyectos em = new EmpresaProyectos(aux[0]);
				if(empresaCreada == false){
					em.addProyectoCiudad(aux[1], aux[2]);
					empresa.add(em);
				}
				linea=bf.readLine();
			}
				
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return empresa;
	}

	public static String devolverEmpresasProyectosCiudades(ArrayList<EmpresaProyectos> listaEmpresas) {
		String aux="";
		
		for (EmpresaProyectos iterador : listaEmpresas) {
			aux += iterador.toString();
		}
		return aux;
	}

	public static ArrayList<String> enumerarEmpresasCiudad(ArrayList<EmpresaProyectos> listaEmpresas, String ciudad) {
		ArrayList<String> enumero = new ArrayList<String>();
		for (EmpresaProyectos iterador : listaEmpresas) {
			for (ProyectoCiudades iterador2 : iterador.getProyectoCiudades()) {
				for (String iterador3 : iterador2.getCiudades()) {
					if(iterador3.equals(ciudad) && !enumero.contains(iterador.getEmpresa()) ){
						enumero.add(iterador.getEmpresa());
					}
				}
			}
		}
		return enumero;
	}

	public static ArrayList<String> enumerarProyectosCiudad(ArrayList<EmpresaProyectos> listaEmpresas, String ciudad) {
		ArrayList<String> enumero = new ArrayList();
		for (EmpresaProyectos  iterador : listaEmpresas) {
			for (ProyectoCiudades iterador2  : iterador.getProyectoCiudades()) {
				for (String iterador3 : iterador2.getCiudades()) {
					if(iterador3.equals(ciudad)){
						enumero.add(iterador2.getProyecto());
					}
				}
				
			}
			
		}
		return enumero;
	}

	public static int contarCiudadesEmpresa(ArrayList<EmpresaProyectos> listaEmpresas, String empresa) {
		ArrayList<String> aux = new ArrayList();
		for (EmpresaProyectos iterador : listaEmpresas) {
			if(iterador.getEmpresa().equals(empresa)){				
				for (ProyectoCiudades iterador2 : iterador.getProyectoCiudades()) {
					for (String iterador3 : iterador2.getCiudades()) {
						if(!aux.contains(iterador3)){
							aux.add(iterador3);
						}
					}
			}
		}
		}
		return aux.size();
	}

	public static ArrayList<String> enumerarCiudadesProyectoEmpresa(ArrayList<EmpresaProyectos> listaEmpresas, String proyecto,
			String empresa) {
		ArrayList<String> aux1 = new ArrayList();
		ArrayList<String> aux2 = new ArrayList();

		
		for (EmpresaProyectos iterador : listaEmpresas) {
			if(iterador.getEmpresa().equals(empresa)){
				for (ProyectoCiudades iterador2 : iterador.getProyectoCiudades()) {
					if(iterador2.getProyecto().equals(proyecto)){
						for (String iterador3 : iterador2.getCiudades()) {
							aux1.add(iterador3);
						}
					}
				}
			}
		}
		
		for (EmpresaProyectos iterador : listaEmpresas) {
			if(iterador.getEmpresa().equals(empresa)){
				for (ProyectoCiudades iterador2 : iterador.getProyectoCiudades()) {
					if(!iterador2.getProyecto().equals(proyecto)){
						for (String iterador3 : iterador2.getCiudades()) {
							aux2.add(iterador3);
						}
					}
				}
			}
		}
		ArrayList<String> aux3= (ArrayList<String>) aux1.clone();
		for (String iterador : aux1) {
			if(!aux2.contains(iterador)){
				aux3.remove(iterador);
			}
		}
		return aux3;
	}

}
